package lee.test.xml;

import java.io.FileWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/*
 
 /   选择根节点 
//   选择当前节点下的所有节点 
.    选择当前节点 
..   选择父节点 
@    选择属性 
示例 
表达式            描述 
bookstore 选择所有bookstore子节点 
/bookstore  选择根节点bookstore 
bookstore/book  在bookstore的子节点中选择所有名为book的节点 
//book           选择xml文档中所有名为book的节点 
bookstore//book 选择节点bookstore下的所有名为book为节点 
//@lang          选择所有名为lang的属性 
断言 
在方括号中[],用来更进一步定位选择的元素 
表达式                      描述 
/bookstore/book[1]           选择根元素bookstore的book子元素中的第一个 
注意: IE5以上浏览器中第一个元素是0 
/bookstore/book[last()] 选择根元素bookstore的book子元素中的最后一个 
/bookstore/book[last()-1]   选择根元素bookstore的book子元素中的最后第二个 
/bookstore/book[position()<3]   选择根元素bookstore的book子元素中的前两个 
//title[@lang]           选择所有拥有属性lang的titile元素 
//title[@lang='eng']    选择所有属性值lang为eng的title元素 
/bookstore/book[price>35.00]    选择根元素bookstore的book子元素中那些拥有price子元素且值大于35的 
/bookstore/book[price>35.00]/title  选择根元素bookstore的book子元素中那些拥有price子元素且值大于35的title子元素 
选择位置的节点 
通配符               描述 
*               匹配所有元素 
@*              匹配所有属性节点 
node()              匹配任何类型的节点 
示例 
表达式               描述 
/bookstore/*       选择根元素bookstore的下的所有子元素 
//*             选择文档中所有元素 
//title[@*]    选择所有拥有属性的title元素 

使用操作符“|”组合选择符合多个path的表达式 
 
 */
public class XmlUtils {
    
    public static void updateXml(String xmlName, String xpath, String value){
        String folder = "junit/xml/sls/";
        xmlName = folder + xmlName;
        XMLWriter writer = null;
        SAXReader saxReader = new SAXReader();  
        try {  
//            XmlUtils.class.getClassLoader().getResource(name)
//            InputStream is = XmlUtils.class.getClassLoader().getResourceAsStream(xmlName);
//            Document doc = saxReader.read(is);
            Document doc = saxReader.read(xmlName);
//            String xpath = "//item[@text='" + name + "']/child::*";  
            List list = doc.selectNodes(xpath);
            
            Iterator it = list.iterator();  
            
            while (it.hasNext()) {  
                Element elt = (Element) it.next();  
                elt.setText(value);
            }  
            writer = new XMLWriter(new FileWriter(xmlName));
            writer.write(doc);
            writer.close();
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }
    public static void main(String[] args) {
        String file = "";
        Date date = new Date(); 
        Calendar c = Calendar.getInstance();
        c.add(c.DAY_OF_MONTH, 7);
       
        Date date2 = c.getTime(); 
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        
            updateXml(file,"//woInfo/billAcct","84002931000148");
            updateXml(file,"//createdDt",sdf.format(date)+"T12:07:02.499+08:00");
            updateXml(file,"//crd", sdf.format(date2)+"T12:07:02.499+08:00");
            updateXml(file,"//BillPrdtDO[prdtTy='PLAN']//bizPrdtNm", "350632");
            
        c.set(Calendar.DAY_OF_WEEK, 7);
        date2 = c.getTime(); 
        updateXml("CreatePortInSLSOrderB2BNowWorkingCrd.xml","//crd", sdf.format(date2)+"T12:07:02.499+08:00");
        updateXml("storesq.xml","//sqDt", sdf.format(date)+" 11:06:27");
        
    }
}
